#include "vec3.h"
#include <iostream>
#include <math.h>
using namespace std;

vec3 operator+ (vec3 v1, vec3 v2){
    
    return vec3(v1.x+v2.x, v1.y+v2.y, v1.z+v2.z);
}

vec3 operator- (vec3 v1, vec3 v2){

    return vec3(v1.x-v2.x, v1.y-v2.y, v1.z-v2.z);
}

vec3 operator* (int a, vec3 v2){

    return vec3(a*v2.x, a*v2.y, a*v2.z);
}

vec3 operator* (float a, vec3 v2){

    return vec3(a*v2.x, a*v2.y, a*v2.z);
}

vec3 operator* (double a, vec3 v2){

    return vec3(a*v2.x, a*v2.y, a*v2.z);
}

real operator* (vec3 v1, vec3 v2){

    return real(v1.x*v2.x + v1.y*v2.y + v1.z*v2.z);
}


void operator+=(vec3 &v1, vec3 v2){

    v1.x += v2.x;
    v1.y += v2.y;
    v1.z += v2.z;
}

void operator-=(vec3 &v1, vec3 v2){
	
    v1.x -= v2.x;
    v1.y -= v2.y;
    v1.z -= v2.z;
}

void operator*=(vec3 &v1, real a){
	v1.x *= a;
    v1.y *= a;
    v1.z *= a;
}

real vec3::module(){
    return sqrt(x*x + y*y + z*z);
}

void vec3::display(){
    cout.precision(2);
    cout.setf(ios::fixed); 
    //cout.setf(ios::scientific); 
    cout<<"("<<x<<", "<<y<<", "<<z<<")"<<endl;
}
